/*-------------------------------------------------------------------------
 *
 * rls.h
 *	  行级安全 (RLS) 实用程序命令的头文件，用于行安全性功能。
 *
 * Copyright (c) 2007-2022, PostgreSQL Global Development Group
 *
 * src/include/utils/rls.h
 *
 *-------------------------------------------------------------------------
 */
#ifndef RLS_H
#define RLS_H

/* GUC 变量 */
extern PGDLLIMPORT bool row_security;

/*
 * 由 check_enable_rls 的调用者使用。
 *
 * RLS 可能在查询涉及的表上完全禁用，这是简单情况，或者它可能依赖
 * 于当前环境（执行查询的角色或 row_security GUC 的值），或者它可能
 * 像往常一样启用。
 *
 * 如果涉及的表没有启用 RLS，则返回 RLS_NONE，以指示我们不需要
 * 担心因 RLS 原因使查询计划失效。如果表启用了 RLS，但我们现在
 * 暂时绕过它，那么我们返回 RLS_NONE_ENV，以指示如果环境变化，
 * 我们需要使其失效并重新规划。最后，如果查询应该启用 RLS，
 * 那么我们返回 RLS_ENABLED，这意味着如果环境变化我们也需要
 * 使其失效。
 *
 * 请注意，如果 noError 为真（表示调用者只是想知道是否应
 * 将 RLS 应用于此用户，但不希望出现错误），那么也会返回
 * RLS_ENABLED；这用于其他错误情况，我们只是想决定是否应将
 * 表中的数据传回用户。
 */
enum CheckEnableRlsResult
{
	RLS_NONE,
	RLS_NONE_ENV,
	RLS_ENABLED
};

extern int	check_enable_rls(Oid relid, Oid checkAsUser, bool noError);

#endif							/* RLS_H */
